package org.jsola.contract.service;

import org.jsola.contract.dao.IContractConfigSiteDAO;
import org.jsola.contract.dto.ContractConfigSiteAddDTO;
import org.jsola.contract.dto.ContractConfigSiteUpdateDTO;
import org.jsola.contract.entity.ContractConfigSiteDO;
import org.jsola.contract.query.ContractConfigSiteQuery;
import org.jsola.contract.vo.ContractConfigSiteListVO;
import org.jsola.contract.vo.ContractConfigSiteVO;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 租户电子合同配置
 *
 * @author JanusMix
 */
public interface IContractConfigSiteService extends IService<IContractConfigSiteDAO, ContractConfigSiteDO> {

    /**
     * 新增租户电子合同配置
     * @param contractConfigSiteAddDTO 新增租户电子合同配置DTO
     * @param tokenUser 当前用户
     * @return 租户电子合同配置详情信息
     */
    ContractConfigSiteVO save(ContractConfigSiteAddDTO contractConfigSiteAddDTO, TokenUser tokenUser);

    /**
     * 修改租户电子合同配置
     * @param contractConfigSiteUpdateDTO 修改租户电子合同配置DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(ContractConfigSiteUpdateDTO contractConfigSiteUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除租户电子合同配置，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param contractConfigSiteIds 租户电子合同配置id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long...contractConfigSiteIds);

    /**
     * 根据租户电子合同配置id查找
     * @param contractConfigSiteId 租户电子合同配置id
     * @param siteId 所属站点id
     * @return 租户电子合同配置详情信息
     */
    ContractConfigSiteVO selectById(Long contractConfigSiteId, String siteId);

    /**
     * 根据租户电子合同配置id查找
     * @param contractConfigSiteIds 租户电子合同配置ids
     * @return 租户电子合同配置详情信息
     */
    List<ContractConfigSiteDO> selectByIds(List<Long> contractConfigSiteIds);

    /**
     * 查询租户电子合同配置
     * @param contractConfigSiteQuery 查询条件
     * @param siteId 所属站点id
     * @return 租户电子合同配置列表信息
     */
    List<ContractConfigSiteListVO> select(ContractConfigSiteQuery contractConfigSiteQuery, String siteId);

    /**
    * 查询租户电子合同配置记录数
    * @param contractConfigSiteQuery 查询条件
    * @param siteId 所属站点id
    * @return 租户电子合同配置记录数
    */
    int selectCount(ContractConfigSiteQuery contractConfigSiteQuery, String siteId);

    /**
     * 分页查询租户电子合同配置
     * @param contractConfigSiteQuery 查询条件
     * @param siteId 所属站点id
     * @return 租户电子合同配置列表信息
     */
    Page<ContractConfigSiteListVO> selectPage(ContractConfigSiteQuery contractConfigSiteQuery, String siteId);


    /**
     * 根据租户电子合同配置id查找
     * @param contractConfigSiteId 租户电子合同配置id
     * @param siteId 所属站点id
     * @return 租户电子合同配置
     */
    ContractConfigSiteDO selectDOById(Long contractConfigSiteId, String siteId);

    /**
     * 查询租户电子合同配置
     * @param contractConfigSiteQuery 查询条件
     * @param siteId 所属站点id
     * @return 租户电子合同配置列表
     */
    List<ContractConfigSiteDO> selectDO(ContractConfigSiteQuery contractConfigSiteQuery, String siteId);

    /**
     * 分页查询所有电子合同配置
     * @param contractConfigSiteQuery 查询条件
     * @return 租户电子合同配置列表信息
     */
    Page<ContractConfigSiteDO> selectAllPage(ContractConfigSiteQuery contractConfigSiteQuery);

    /**
     * 开启或关闭合同配置
     *
     * @param configId 配置id
     * @param enable true 开启 false 关闭
     * @param tokenUser 当前登录用户
     */
    void enableContractConfig(Long configId, Boolean enable, TokenUser tokenUser);

    /**
     * 充值租户合同额度
     *
     * @param configId 配置id
     * @param quota 额度
     * @param tokenUser 当前登录用户
     */
    void payContractConfigQuota(Long configId, Integer quota, TokenUser tokenUser);

    /**
     * 获取租户合同配置
     *
     * @param siteId 租户id
     * @return 租户合同配置
     */
    ContractConfigSiteDO selectBySiteId(String siteId);
}


